package com.interview.a_多线程.e_Thread和Object中的重要方.e_两个线程交替打印_0_100_奇偶数;

/**
 * 两个线程 交替打印 奇偶数
 * <p>
 * 第一个线程从0开始
 * 拿到锁就打印 打印后自己唤醒其他线程 自己休眠
 */
public class Print_2 implements Runnable {
    private static int count = 0;
    private static final Object lock = new Object();

    public static void main(String[] args) {
        Print_2 print_2 = new Print_2();

        Thread thread1 = new Thread(print_2, "偶数 ");
        thread1.start();

        Thread thread2 = new Thread(print_2, "奇数 ");
        thread2.start();

    }

    @Override
    public void run() {
        while (count <= 100) {
            synchronized (lock) {
                System.out.println(Thread.currentThread().getName() + " " + count);
                count++;

                //唤醒某一个等待中的线程(唤醒并不一定获取到锁，
                // 因为我（拿到锁的其他线程）还没释放锁)
                lock.notify();
                try {
                    //不做判断 无法终止
                    if (count <= 100) {

                        //重新进入等待，释放锁
                        lock.wait();

                    }
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }

        }
    }
}
